package Arrays类;

import java.util.Arrays;
import java.util.Comparator;

public class Arrays的sort排序方法 {
    public static void main(String[] args) {
        /*  public static void sort(数组,排序规则)
        参数一:排序的数组
        参数二:排序的规则
        细节:
            只能给引用数据类型的数组进行排序
            如果数组是基本数据类型,需要变成对应的包装类.
     */
        Integer arr[]={2,3,1,5,6,7,8,4,9};
        //第二个参数是一个接口,调用的时候,需要传递这个接口的实现类对象,作为排序规制
        //利用匿名内部类--->使用一次

        //底层原理:
        //利用的是插入排序和二分排序.
        //默认是把序列的0号索引作为有序序列,后面作为无序序列.
        //然后遍历无序序列的每一个元素,插入到用二分法确定的有序序列的中(前面的0号)的插入点
        //然后这个元素跟插入点元素进行比较,比较的规则就是compare方法的方法体,
        //如果返回值是负数,那么就拿着这个元素继续前面的元素进行比较,
        //正数和0就就继续和后面的元素进行比较.直到确定这个元素的的最终位置.

        //Comparator的参数:
        //参数一 o1:表示在无序序列中,遍历得到的每一个元素.
        //参数二 o2:有序序列的元素.
        //返回值:
        //负数:表示当前的插入元素是小的,放在前面
        //正数:大的,放在后面.
        //0:表是要插入的元素和现在的元素比是一样的,也会放在后面.
        //{2,3,1,5,6,7,8,4,9}
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println("-------------------");
                System.out.println("o1 = " + o1);
                System.out.println("o2 = " + o2);
                return o1-o2;
            }
            //总结o2-o1:降序排列
            //o1-o2:升序排列
        });
        System.out.println(Arrays.toString(arr));
    }

}
